/**
 * 
 */
package ve.com.neometrica.inventario.web.bean;

import java.util.LinkedList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.SelectItem;

import org.apache.log4j.Logger;

import ve.com.neometrica.inventario.api.model.Destino;
import ve.com.neometrica.inventario.api.model.DetalleTransaccion;
import ve.com.neometrica.inventario.api.model.Producto;
import ve.com.neometrica.inventario.api.model.Transaccion;

/**
 * @author acabrera
 *
 */
@ManagedBean(name="transaccionBean")
@SessionScoped
public class TransaccionBean extends AdministrarBean{
	
	private List<Producto> productos;
	private List<SelectItem> productoSelect;
	private String productoseleccionadaId;
	
	private List<Destino> destinos;
	private List<SelectItem> destinoSelect;
	private String destinoseleccionadaId;
	
	private DetalleTransaccion detalleTransaccion;
	private Transaccion transaccion;
	private List<DetalleTransaccion> detalles;
	private static Logger log = Logger.getLogger(TransaccionBean.class);
	public TransaccionBean() {
		// TODO Auto-generated constructor stub
	}
	
	@Override
	protected void init() {
		detalleTransaccion=new DetalleTransaccion();
		transaccion=new Transaccion();
    	this.detalles=new LinkedList<DetalleTransaccion>();
		this.productos=this.getProductoService().getForCombo();
    	this.destinos=this.getDestinoService().getAll();
		procesarListas();
	}
    private void procesarListas(){

		if(productoSelect==null){
			this.productoSelect=new LinkedList<SelectItem>();
			for (Producto p : productos) {
				SelectItem s=new SelectItem(p.getId(), p.getEtiqueta());
				productoSelect.add(s);
			}
		}
		if(destinoSelect==null){
			this.destinoSelect=new LinkedList<SelectItem>();
			for(Destino d: destinos){
				SelectItem s=new SelectItem(d.getId(), d.getNombre());
				destinoSelect.add(s);
			}
		}
    }

    public void addDetalle(){
    	log.info("Add");
    	//TODO: validar primero
    	if(validarCarga()){
	    	for (Producto p : this.productos) {
				if(p.getId().equals(Integer.valueOf(productoseleccionadaId))){
					detalleTransaccion.setProducto(p);
					//TODO: este producto deberia ser sacado de la lista
				}
			}
	    	
	    	transaccion.getDetalles().add(detalleTransaccion);
	    	detalles.add(detalleTransaccion);
	    	detalleTransaccion=new DetalleTransaccion();
	    	generarOk("detalletransaccionok");
    	}else{
    		//error
    	}
    	
    }
    private Boolean validarCarga(){
    	Boolean resultado=Boolean.TRUE;
    	resultado=productoseleccionadaId.equals("-1")?!generarError("errorproductoseleccion")  :resultado;//debo generar el error tambien
    	resultado=destinoseleccionadaId.equals("-1")?!generarError("errordestinoseleccion")  :resultado;//debo generar el error tambien
    	resultado=!(detalleTransaccion.getCantidad()!=null&&detalleTransaccion.getCantidad()>0)?!generarError("errorcantidadiventario"):resultado;//TODO debo generar un error para mostrar
    	return resultado;
    }
    
    public void save(){
    	for(Destino d: this.destinos){
    		if(d.getId().equals(Integer.valueOf(destinoseleccionadaId))){
    			transaccion.setDestino(d);		
    		}
    	}    	
    	this.getTransaccionService().save(transaccion);
    	generarOk("transaccionok");

    }
    
    public List<Producto> getProductos() {
		return productos;
	}

	public void setProductos(List<Producto> productos) {
		this.productos = productos;
	}

	public List<SelectItem> getProductoSelect() {
		return productoSelect;
	}

	public void setProductoSelect(List<SelectItem> productoSelect) {
		this.productoSelect = productoSelect;
	}

	public String getProductoseleccionadaId() {
		return productoseleccionadaId;
	}

	public void setProductoseleccionadaId(String productoseleccionadaId) {
		this.productoseleccionadaId = productoseleccionadaId;
	}

	public DetalleTransaccion getDetalleTransaccion() {
		return detalleTransaccion;
	}

	public void setDetalleTransaccion(DetalleTransaccion detalleTransaccion) {
		this.detalleTransaccion = detalleTransaccion;
	}

	public Transaccion getTransaccion() {
		return transaccion;
	}

	public void setTransaccion(Transaccion transaccion) {
		this.transaccion = transaccion;
	}

	public List<DetalleTransaccion> getDetalles() {
		return detalles;
	}

	public void setDetalles(List<DetalleTransaccion> detalles) {
		this.detalles = detalles;
	}

	public List<Destino> getDestinos() {
		return destinos;
	}

	public void setDestinos(List<Destino> destinos) {
		this.destinos = destinos;
	}

	public List<SelectItem> getDestinoSelect() {
		return destinoSelect;
	}

	public void setDestinoSelect(List<SelectItem> destinoSelect) {
		this.destinoSelect = destinoSelect;
	}

	public String getDestinoseleccionadaId() {
		return destinoseleccionadaId;
	}

	public void setDestinoseleccionadaId(String destinoseleccionadaId) {
		this.destinoseleccionadaId = destinoseleccionadaId;
	}

	

}
